Skip to content

feat: add 0install as an installation method on the downloads page - #9026

Open
bastianeicher wants to merge 1 commit into
nodejs:mainfrom
bastianeicher:feat/add-zeroinstall-package-manager
Open

feat: add 0install as an installation method on the downloads page#9026
bastianeicher wants to merge 1 commit into
nodejs:mainfrom
bastianeicher:feat/add-zeroinstall-package-manager

Conversation

@bastianeicher

@bastianeicher bastianeicher commented Jul 28, 2026

Copy link
Copy Markdown

Description

0install is a cross-platform decentralized package manager. Applications are packaged as "feeds": XML files listing available versions, where to download them, and how to extract and execute them. The 0install project maintains a feed for Node.js: https://apps.0install.net/javascript/node.xml

This adds 0install alongside the other community installation methods such as asdf and Chocolatey.

Validation

nodejs_0install

Check List

  • I have read the Contributing Guidelines and made commit messages that follow the guideline.
  • I have run pnpm format to ensure the code follows the style guide.
  • I have run pnpm test to check if all tests are passing.
  • I have run pnpm build to check if the website builds without errors.
  • I've covered new added functionality with unit tests if necessary.

@bastianeicher
bastianeicher requested a review from a team as a code owner July 28, 2026 11:13
Copilot AI review requested due to automatic review settings July 28, 2026 11:13
@vercel

vercel Bot commented Jul 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
nodejs-org Skipped Skipped Jul 31, 2026 11:54am

Request Review

@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Download-page content and UI only; no changes to auth, releases, or site runtime behavior.

Overview
0install is now listed as a community install method on the Node.js download page, alongside asdf and Chocolatey.

A new zeroinstall.bash snippet generates OS-specific steps: installing 0install (winget on Windows, curl script elsewhere), pinning the selected Node version via the official feed, wiring node/npm/npx with 0install add, and optional global npm prefix/PATH hints. The method is registered in download constants.json (WIN/MAC/LINUX), the InstallationMethod type includes ZEROINSTALL, and English copy describes 0install under platformInfo.zeroinstall.

A ZeroInstall SVG icon is added to ui-components and included in the platform-logos Storybook gallery.

Reviewed by Cursor Bugbot for commit dd73fcf. Bugbot is set up for automated code reviews on this repo. Configure here.

Comment thread apps/site/snippets/en/download/zeroinstall.bash Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds 0install as a community installation method on the Downloads page, including a new UI icon and snippet logic to support installing pnpm via 0install’s feed instead of Corepack.

Changes:

  • Added a new ZeroInstall installation-method icon and exported it through the UI icon index (plus Storybook coverage).
  • Added ZEROINSTALL to the downloads install-method constants and the InstallationMethod type union.
  • Introduced a new 0install download snippet and adjusted snippet processing to skip Corepack installation when using ZEROINSTALL + PNPM; updated the English pnpm snippet accordingly.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx Adds the 0install SVG icon component.
packages/ui-components/src/Icons/InstallationMethod/index.ts Exports the new ZeroInstall icon.
packages/ui-components/design/platform-logos.stories.tsx Displays the new icon in the design Storybook.
packages/i18n/src/locales/en.json Adds English platform info text for 0install.
apps/site/util/download/constants.json Registers ZEROINSTALL as a new install method (name/icon/url/info).
apps/site/types/release.ts Extends the InstallationMethod union with ZEROINSTALL.
apps/site/snippets/en/download/zeroinstall.bash Adds the English 0install installation snippet.
apps/site/snippets/en/download/pnpm.bash Uses 0install feed for pnpm when installMethod === 'ZEROINSTALL'.
apps/site/components/Downloads/Release/ReleaseCodeBox.tsx Skips Corepack-install snippet when using ZEROINSTALL + PNPM.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx Outdated
Comment thread apps/site/snippets/en/download/zeroinstall.bash Outdated
Comment thread apps/site/snippets/en/download/pnpm.bash Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

apps/site/snippets/en/download/zeroinstall.bash:7

  • 0install add does not support a --version flag (per 0install CLI docs, version constraints are handled via 0install select --version=... / selections). As written, these commands will likely fail with an unknown option error, breaking the generated download snippet for 0install.

If you don't intend to pin an exact version here, remove the --version templating from the add commands (or switch to the documented 0install select flow if pinning is required).

0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}

Copilot AI review requested due to automatic review settings July 28, 2026 11:56
@github-actions

Copy link
Copy Markdown
Contributor

Note

Your Pull Request seems to be updating Translations of the Node.js Website.

Whilst we appreciate your intent; Any Translation update should be done through our Crowdin Project.
We recommend giving a read on our Translation Guidelines.

Thank you!

Comment thread apps/site/snippets/en/download/zeroinstall.bash

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 23 out of 23 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx:9

  • This new SVG icon component omits default width/height attributes on the root <svg>, unlike the other InstallationMethod icons in this folder (they default to 32×32). Without explicit sizing props, the browser default (300×150) can cause inconsistent rendering in consumers.
  <svg
    xmlns="http://www.w3.org/2000/svg"
    xmlnsXlink="http://www.w3.org/1999/xlink"
    viewBox="0 0 68 68"
    {...props}
  >

Comment thread apps/site/snippets/en/download/zeroinstall.bash
@MikeMcC399

This comment was marked as outdated.

@avivkeller

Copy link
Copy Markdown
Member

Please only update the english site

@avivkeller

Copy link
Copy Markdown
Member
  • Version Support: Must support all currently supported, non-End-of-Life (EOL) Node.js versions.
  • OS Compatibility: Must function on at least one officially supported Operating System (OS).
  • Free and Open Source: Must be free to use and open source, must not be sold as a commercial product, and must not be a paid service.

Comment thread apps/site/snippets/es/download/pnpm.bash Outdated
Copilot AI review requested due to automatic review settings July 28, 2026 15:53
@bastianeicher
bastianeicher force-pushed the feat/add-zeroinstall-package-manager branch from 3ff16a6 to 0f5fa0b Compare July 28, 2026 15:53
Comment thread apps/site/components/Downloads/Release/ReleaseCodeBox.tsx Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

apps/site/snippets/en/download/zeroinstall.bash:6

  • These 0install add commands use --command=... for npm/npx. The published 0install man pages and user guide for add document the form 0install add NAME URI and do not list --command as a supported option for add, which makes this snippet likely to fail for users on some 0install versions/platforms.
0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}

Comment thread apps/site/components/Downloads/Release/ReleaseCodeBox.tsx Outdated
Copilot AI review requested due to automatic review settings July 28, 2026 16:45
@bastianeicher
bastianeicher force-pushed the feat/add-zeroinstall-package-manager branch from 0f5fa0b to 732e67f Compare July 28, 2026 16:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 30, 2026 18:39
@bastianeicher
bastianeicher force-pushed the feat/add-zeroinstall-package-manager branch from 572ff80 to ac15bab Compare July 30, 2026 18:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (2)

apps/site/snippets/en/download/zeroinstall.bash:6

  • The 0install CLI syntax in this snippet places options after the URI/positional args (e.g. 0install download <URI> --version=... --pin and 0install add npm <URI> --command=npm ...). In the documented synopsis for these subcommands, options are expected before positional arguments; with many CLIs this means the flags can be ignored or treated as extra args, producing a non-working snippet for users.
${props.os === 'WIN' ? '\n# Download specific Node.js version:\n0install download https://apps.0install.net/javascript/node.xml --version=' + props.release.version + ' --pin\n' : ''}
# Add Node.js and NPM to PATH:
0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}

packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx:9

  • Other installation-method icons in this directory set a default width/height on the root <svg> (typically 32x32). This icon omits them, so rendering it without explicit sizing (outside helper call sites like Storybook/dropdowns) will fall back to the SVG default size, which can break layout consistency.
  <svg
    xmlns="http://www.w3.org/2000/svg"
    xmlnsXlink="http://www.w3.org/1999/xlink"
    viewBox="0 0 68 68"
    {...props}

@bastianeicher
bastianeicher requested a review from avivkeller July 30, 2026 21:31
Comment thread apps/site/snippets/en/download/zeroinstall.bash Outdated
Comment on lines +8 to +9
# Enable global package installation:
npm config set prefix ${props.os === 'WIN' ? '"$env:appdata\\npm"' : '~/.npm-global'}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this needed? Why does 0install require changing npm configs?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By default, npm install -g ... installs packages into lib/node_modules/ relative to the Node.js installation directory.

0install treats extracted archive directories as immutable. It stores them in a content-addressable store (conceptually similar to PNPM) and makes them read-only (chmod -R a-w) to ensure their contents cannot be modified.

As a result, running npm install -g somepackage would fail with an error like:

npm error code EACCES
npm error syscall mkdir
npm error path /home/bastian/.cache/0install.net/implementations/sha256new_YB5SJCPHCJGA6PZ7HPEFM3OFEZ3N7S6PKTMDTTTVL3DFEUTPQDMQ/lib/node_modules/somepackage

The npm config set prefix ... command-line isn't strictly necessary, but it helps users avoid this pitfall.

Comment thread packages/ui-components/src/Icons/InstallationMethod/ZeroInstall.tsx
Comment thread apps/site/snippets/en/download/zeroinstall.bash
Copilot AI review requested due to automatic review settings July 30, 2026 23:17
@bastianeicher
bastianeicher force-pushed the feat/add-zeroinstall-package-manager branch from ac15bab to 5f9dd72 Compare July 30, 2026 23:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI review requested due to automatic review settings July 30, 2026 23:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7692e1b. Configure here.

Comment thread apps/site/snippets/en/download/zeroinstall.bash
@avivkeller

Copy link
Copy Markdown
Member

@bastianeicher Sorry to make you do this but you have to rebase, we recently changed some directory things. No need to resolve conflicts, just git rebase origin/main :-)

Comment on lines +3 to +7
${props.os === 'WIN' ? '\n# Download specific Node.js version:\n0install download https://apps.0install.net/javascript/node.xml --version=' + props.release.version + ' --pin\n' : ''}
# Add Node.js and NPM to PATH:
0install add node https://apps.0install.net/javascript/node.xml${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npm https://apps.0install.net/javascript/node.xml --command=npm${props.os === 'WIN' ? '' : ' --version=' + props.release.version}
0install add npx https://apps.0install.net/javascript/node.xml --command=npx${props.os === 'WIN' ? '' : ' --version=' + props.release.version}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Forgive me not fully understanding 0install, I'm sure my questions can be annoying 😓, but why are the command slightly different on Windows vs Linux/MacOS, e.g.

0install download https://apps.0install.net/javascript/node.xml --version=[something]

Wouldn't that either be needed on all systems or none, maybe I just misunderstand?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Forgive me not fully understanding 0install, I'm sure my questions can be annoying 😓

Not at all, I've found the process of iterating on this PR very productive. 👍

why are the command slightly different on Windows vs Linux/MacOS

This is an inconsistency between the Windows and POSIX versions of 0install at the moment.

An upcoming releases of the Windows version is likely to unify this, so that both can use the 0install add --version=[something] syntax. But since that's not released yet (and users might be on older versions of 0install for a while), so I'd rather keep the separate 0install download --version=[something] --pin step for Windows for now. This will also keep working in new releases.

Comment thread apps/site/snippets/en/download/zeroinstall.bash Outdated
0install is a cross-platform decentralized package manager.
Applications are packaged as "feeds": XML files listing available
versions, where to download them, and how to extract and execute
them. The 0install project maintains a feed for Node.js:
https://apps.0install.net/javascript/node.xml

This adds 0install alongside the other community installation
methods such as asdf and Chocolatey.
Copilot AI review requested due to automatic review settings July 31, 2026 11:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI review requested due to automatic review settings July 31, 2026 11:54
@bastianeicher
bastianeicher force-pushed the feat/add-zeroinstall-package-manager branch from b9a138a to dd73fcf Compare July 31, 2026 11:54

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@bastianeicher

Copy link
Copy Markdown
Author

@bastianeicher Sorry to make you do this but you have to rebase, we recently changed some directory things. No need to resolve conflicts, just git rebase origin/main :-)

@avivkeller Done 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants